/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package productos.datamodel;

import abstractClasses.AbstractListadoEntidades;
import datamodel.FiltradoDataModel;
import entities.Configuracion;
import entities.Producto;
import entities.Temporada;
import facades.ProductoFacade;
import java.util.Collections;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import qualifiers.ConfiguracionActual;
import sql.FiltradoProductosSQLGenerator;

/**
 *
 * @author damfercer
 */
public class ListaProductos extends AbstractListadoEntidades<Producto, ProductoFacade> {
    @Inject
    @ConfiguracionActual
    private Configuracion configuracion;
    private FiltradoProductosSQLGenerator filtradoSQLGenerator;
    private FiltradoDataModel filtradoDataModel;
    
    @PostConstruct
    @Override
    public void init(){
        String version = FacesContext.class.getPackage().getImplementationVersion();
        setFacade(getEntityFacadeInstance().get());
        poblarTabla();
        filtradoSQLGenerator=new FiltradoProductosSQLGenerator();
        filtradoDataModel=new FiltradoDataModel();
    }
    
    public void poblarTabla(){
        if(configuracion!=null){
            if(configuracion.getTemporada()!=null){
                Temporada temporada=configuracion.getTemporada();
                List<Producto> productos=getFacade().getProductosDeTemporada(temporada);
                for(Producto p: productos){
                     Collections.sort(p.getProductoTallaList());
                }
                setListadoEntidades(productos);
            }
        }
    }
    
    public void filtrar(){
        filtradoSQLGenerator.setDataModel(filtradoDataModel);
        String sql=filtradoSQLGenerator.generateSQL();
        List<Producto> productos=getFacade().filtrarProductos(sql);
        for(Producto p: productos){
             Collections.sort(p.getProductoTallaList());
        }
        setListadoEntidades(productos);
    }
    
    /**
     * @return the filtradoDataModel
     */
    public FiltradoDataModel getFiltradoDataModel() {
        return filtradoDataModel;
    }

    /**
     * @param filtradoDataModel the filtradoDataModel to set
     */
    public void setFiltradoDataModel(FiltradoDataModel filtradoDataModel) {
        this.filtradoDataModel = filtradoDataModel;
    }
}

